<%	
	/*@ 扩展对象的静态方法 */
	Object.extend
	(
		Array,
		{
			//->from 在prototype中类似于 $A 的一个方法
			from:$A	
		}
	);
	/*@ 扩展对象的原型方法 */	
	Object.extend(Array.prototype,Enumerable);
	/*
		从 Enumerable 继承来的方法
		each,toArray
	*/
	Object.extend
	(
		Array.prototype,
		{
			//->遍历数组元素
			_each:function($iterator) 
			{
				for(var _i=0,_length=this.length;_i<_length;_i++)
				$iterator(this[_i]);
			},	
			//->数组倒序
			_reverse:Array.prototype.reverse,			
			//->清空数组
			clear:function()
			{
				this.length=0;
				return this;
			},
			//->创建数组的一个副本
			clone:function()
			{
				return [].concat(this);
			},
			//->去除无效元素 null,undefined
			compact:function()
			{
				return this.select
				(	function($value) 
					{
						return $value!=null;
					}
				);				
			},			
			//->返回数组头一个元素
			first:function()
			{
				return this[0];
			},
			//->合并数组中的子数组
			flatten:function()
			{
				return this.inject
				(
					[],
					function($array,$value) 
					{
						return $array.concat(Object.isArray($value) ? $value.flatten():[$value]);
					}
				);			
			},
			//->检测数组中是否有相应对象
			include:function($object)
			{
				return this.indexOf($object)!=-1 ? true:false;
			},			
			//->检测数组中是否有相应对象
			indexOf:function($object)
			{
				for(var i=0,length=this.length;i<length;i++)
				{
					if(this[i]==$object) return i;
				}
				return -1;		
			},
			//->返回数组的字符串形式
			inspect:function()
			{
				return '[' + this.map(Object.inspect).join(', ') + ']';	
			},
			//->返回数组最后一个元素
			last:function()
			{
				return this[this.length-1];
			},	
			//->智能返回数组值
			reduce:function()
			{
				return this.length> 1 ? this:this[0];	
			},	
			//->重构reverse方法
			reverse:function($inline)
			{
				return ($inline!==false ? this:this.toArray())._reverse();	
			},	
			//->返回数组的大小
			size:function() 
			{
				return this.length;
			},			
			//->转换成JSON字符串
			toJSON:function()
			{
				var results=[];
				this.each
				(
					function($object) 
					{
						var value=Object.toJSON($object);
						if (value!==undefined) results.push(value);
					}
				);
				return '['+results.join(',')+']';				
			},		
			//->去除相同元素，区分大小写
			uniq:function($sorted)
			{
				return this.inject([], function(array, value, index) {
				if (0 == index || ($sorted ? array.last() != value : !array.include(value)))
				array.push(value);
				return array;
				});
			},		
			//->移除数组元素
			without:function()
			{	
				var values=$A(arguments);
				return this.select
				(
					function(value) 
					{
						return !values.include(value);
					}
				);			
			}		
		}
	);
%>